#include "clipboardItem.h"
#include <QFile>
#include <QUrl>
#include <QFileInfo>
#include <QDir>
#include <QApplication>
#include <QDebug>

/**
单个元素的构造
**/

// 构造函数
ClipboardItem::ClipboardItem(ClipboardType type, const QVariant& content)
    : type(type), content(content), favorite(false) {}

// 获取内容类型
ClipboardType ClipboardItem::getType() const {
    return type;
}

// 获取内容
QVariant ClipboardItem::getContent() const {
    return content;
}

// 获取简短显示文本
QString ClipboardItem::getDisplayText() const {
    switch (type) {
        case ClipboardType::Text:
            return content.toString().left(50);
        case ClipboardType::Image:
            return content.toString();
        case ClipboardType::File:
            return content.toString();
        case ClipboardType::Url:
            return content.toString().left(50);
        default:
            return "Unknown Type";
    }
}

// 是否收藏
bool ClipboardItem::isFavorite() const {
    return favorite;
}

// 设置收藏状态
void ClipboardItem::setFavorite(bool favorite) {
    this->favorite = favorite;
}

// 编辑内容
bool ClipboardItem::setContent(const QVariant& newContent) {
    if (validateContent(newContent)) {
        content = newContent;
        return true;
    }
    return false;  // 如果验证失败，返回 false
}

// 验证新内容是否符合类型
bool ClipboardItem::validateContent(const QVariant& newContent) const {
    switch (type) {
        case ClipboardType::Text:
            return newContent.type() == QVariant::String;
        case ClipboardType::Image:
            return newContent.canConvert<QImage>();
        case ClipboardType::File:
            return QFile::exists(newContent.toString());
        case ClipboardType::Url:{
            QUrl url(newContent.toString());
            return url.isValid();
        }
        default:
            return false;
    }
}

// 重载 == 运算符
bool ClipboardItem::operator==(const ClipboardItem& other) const {
    return type == other.type && content == other.content;
}

QString ClipboardItem::getFileInStorage() const{
    //获取绝对路径，得到原文件
    QString sourceFilePath = content.toString();
    QFileInfo sourceFile(sourceFilePath);

    // 获取当前项目文件夹路径
    QString projectFolderPath = QApplication::applicationDirPath();
    QString tempFolderPath = QDir(projectFolderPath).filePath("tempFileStorage");
    QDir tempDir(tempFolderPath);

    // 储存文件的文件夹拼上文件名
    QString storageFolderPath = tempFolderPath;
    QString destinationFilePath = QDir(storageFolderPath).filePath(sourceFile.fileName());

    return destinationFilePath;
}
